class Solution {
public:
    int rob(vector<int>& nums) {
        int n = nums.size();
        vector<int> dp1(n), dp2(n); // dp1/2[i]表示选择偷/不偷i，从[0 - i]的最大金额
        dp1[0] = nums[0];
        for(int i = 1; i < n; ++i)
        {
            dp1[i] = dp2[i - 1] + nums[i];
            dp2[i] = max(dp1[i - 1], dp2[i - 1]);
        }
        return max(dp1[n - 1], dp2[n - 1]);
    }
};